///*******************************************************************************
// * Copyright (c) 2004, 2007 IBM Corporation and others.
// * All rights reserved. This program and the accompanying materials
// * are made available under the terms of the Eclipse Public License v1.0
// * which accompanies this distribution, and is available at
// * http://www.eclipse.org/legal/epl-v10.html
// *
// * Contributors:
// *     IBM Corporation - initial API and implementation
// *******************************************************************************/
//package org.eclipse.ui.tests.session;
//
//import junit.framework.TestCase;
//import junit.framework.TestSuite;
//
//import org.eclipse.core.resources.IFile;
//import org.eclipse.core.resources.IProject;
//import org.eclipse.jface.util.IPropertyChangeListener;
//import org.eclipse.jface.util.PropertyChangeEvent;
//import org.eclipse.ui.IEditorInput;
//import org.eclipse.ui.IEditorPart;
//import org.eclipse.ui.IEditorReference;
//import org.eclipse.ui.IWorkbench;
//import org.eclipse.ui.IWorkbenchPage;
//import org.eclipse.ui.IWorkbenchPart3;
//import org.eclipse.ui.PlatformUI;
//import org.eclipse.ui.ide.IDE;
//import org.eclipse.ui.part.FileEditorInput;
//import org.eclipse.ui.tests.api.workbenchpart.TitleTestEditor;
//import org.eclipse.ui.tests.harness.util.FileUtil;
//
///**
// * If a view is not activated during a session, it's part is not instantiated.
// * This tests that case, and the outcome should be the view has it's last
// * session state when it is finally instantiated in the workbench.
// * 
// * @since 3.3
// */
//public class ArbitraryPropertiesEditorTest extends TestCase {
//	/**
//	 * 
//	 */
//	private static final String USER_PROP = "org.eclipse.ui.tests.users";
//
//	private static final String EDITOR_ID = "org.eclipse.ui.tests.TitleTestEditor";
//
//	public static TestSuite suite() {
//		return new TestSuite(ArbitraryPropertiesEditorTest.class);
//	}
//
//	public ArbitraryPropertiesEditorTest(String testName) {
//		super(testName);
//	}
//
//	/**
//	 * This is the first part of a 3 part tests. First instantiate a view and
//	 * set a state.
//	 * 
//	 * @throws Throwable
//	 */
//	public void testOpenEditor() throws Throwable {
//		final IWorkbench workbench = PlatformUI.getWorkbench();
//		final IWorkbenchPage page = workbench.getActiveWorkbenchWindow()
//				.getActivePage();
//
//		IProject proj = FileUtil.createProject("EditorSessionTest");
//		IFile file = FileUtil.createFile("state.txt", proj);
//
//		TitleTestEditor editor = (TitleTestEditor) page.openEditor(
//				new FileEditorInput(file), EDITOR_ID);
//
//		// this makes the second file active on the first
//		file = FileUtil.createFile("state_active.txt", proj);
//		IDE.openEditor(page, file);
//
//		editor.setPartProperty(USER_PROP, "pwebster");
//	}
//
//	/**
//	 * The second session doesn't activate the view, so it should not be
//	 * instantiated.
//	 * 
//	 * @throws Throwable
//	 */
//	public void testSecondOpening() throws Throwable {
//		final IWorkbench workbench = PlatformUI.getWorkbench();
//		final IWorkbenchPage page = workbench.getActiveWorkbenchWindow()
//				.getActivePage();
//		IEditorReference[] editors = page.getEditorReferences();
//		for (int i = 0; i < editors.length; i++) {
//			IEditorReference ref = editors[i];
//			if (ref.getEditorInput().getName().equals("state.txt")) {
//				assertNull("The editor should not be instantiated", ref
//						.getPart(false));
//				assertEquals("pwebster", ref.getPartProperty(USER_PROP));
//			}
//		}
//	}
//
//	static class PropListener implements IPropertyChangeListener {
//		public int count = 0;
//
//		/*
//		 * (non-Javadoc)
//		 * 
//		 * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
//		 */
//		public void propertyChange(PropertyChangeEvent event) {
//			count++;
//		}
//	};
//
//	/**
//	 * Activate the view and it's state should re-appear.
//	 * 
//	 * @throws Throwable
//	 */
//	public void testPartInstantiation() throws Throwable {
//		final IWorkbench workbench = PlatformUI.getWorkbench();
//		final IWorkbenchPage page = workbench.getActiveWorkbenchWindow()
//				.getActivePage();
//
//		IEditorReference ref = null;
//		IEditorReference[] editors = page.getEditorReferences();
//		for (int i = 0; i < editors.length; i++) {
//			if (editors[i].getEditorInput().getName().equals("state.txt")) {
//				ref = editors[i];
//			}
//		}
//
//		assertEquals("pwebster", ref.getPartProperty(USER_PROP));
//		PropListener listener = new PropListener();
//		ref.addPartPropertyListener(listener);
//
//		try {
//
//			IWorkbenchPart3 wp = (IWorkbenchPart3) ref.getPart(true);
//			assertEquals("pwebster", wp.getPartProperty(USER_PROP));
//			assertEquals(0, listener.count);
//		} finally {
//			ref.removePartPropertyListener(listener);
//		}
//
//		IEditorInput input = ref.getEditorInput();
//
//		// the state should not be saved between a close and
//		// an open in the same session
//		page.closeEditor((IEditorPart) ref.getPart(true), false);
//
//		TitleTestEditor editor = (TitleTestEditor) page.openEditor(input,
//				EDITOR_ID);
//		assertNull(editor.getPartProperty(USER_PROP));
//	}
//}
